{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fashion MNIST"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import fetch_openml\n",
    "fashion_mnist = fetch_openml(data_id=40996) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels_s = '0 T-shirt/top \\n1 Trouser \\n2 Pullover \\n3 Dress \\n4 Coat \\n5 Sandal \\n6 Shirt \\n7 Sneaker \\n8 Bag \\n9 Ankle boot'\n",
    "\n",
    "fashion_label_translation = {\n",
    "    int(k): v for k, v in [\n",
    "        item.split(maxsplit=1) for item in labels_s.split('\\n')\n",
    "    ]\n",
    "}\n",
    "\n",
    "def translate_label(y, translation=fashion_label_translation):\n",
    "    return pd.Series(y).apply(lambda y: translation[int(y)]).values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def display_fashion(img, target, ax):\n",
    "    \n",
    "    if len(img.shape):\n",
    "        w = int(np.sqrt(img.shape[0]))\n",
    "        img = img.reshape((w, w))\n",
    "    \n",
    "    ax.imshow(img, cmap='Greys')\n",
    "    ax.set_title(f'{target}')\n",
    "    ax.grid(False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "fashion_mnist_sample = {}\n",
    "\n",
    "fashion_mnist_sample['data'], _, fashion_mnist_sample['target'], _ = train_test_split(\n",
    "    fashion_mnist['data'], fashion_mnist['target'], train_size=10000, random_state=42\n",
    ")\n",
    "\n",
    "x, y = fashion_mnist_sample['data'], fashion_mnist_sample['target']\n",
    "x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "scaler = MinMaxScaler()\n",
    "\n",
    "x_train = scaler.fit_transform(x_train)\n",
    "x_test = scaler.transform(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "translation = fashion_label_translation\n",
    "y_train_translated = translate_label(y_train, translation=translation)\n",
    "y_test_translated = translate_label(y_test, translation=translation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "le = LabelEncoder()\n",
    "y_train_encoded = le.fit_transform(y_train_translated)\n",
    "y_test_encoded = le.transform(y_test_translated)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/tarek/anaconda3/envs/scikitbook/lib/python3.6/site-packages/ipykernel_launcher.py:9: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.\n",
      "  if __name__ == '__main__':\n"
     ]
    },
    {
     "data": {
      "image/png": "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qOVJWkPXB7/Pes0112zxmAVqGRcuY6j+Q8ydu+L0EyZM8Przzz/3+pvf/KbX6623ntccl7z8+9//9vqee1YsxcvlPvzww73+6le/2upzlKMR+zHmxhtv9PqZZ57xukePHl4vW7bM6913Ly72okWLvOY2snz5cq+5rf785z9vZ4nz0ehxaVYUlzhRXOKk0eNy1FFHec1jvO7du3v96aefep0db3z22Wde832Ex3N83/nKV77i9ahRo9pa7BapV1zyzLPX2jHbkiVLvOY65rr/8MMPi/ZZvHhxyWPxdjyWzkN7xp0FysVFqxiINsMX5xdffOE1/2jJc9Fee+21Xs+bN8/r3r17F23HDfGGG27wurUPCPiHFx+zrQ2sXoR+8Lf2e/D2XDd84+AYzZgxo2j/Z5991uuLLrrIa37A8/HHH5c8X6is/H4jTKSap85fffVVr6+//nqv58+f73Xnzp295pvQiSee6HWnTp28Pvjgg73u0qVL0fnee+89r8eOHev1Lrvs4vX666/vNQ9AHnvsMa8PPPBArw89dMXD/LXWWgsrI6eccorX/PAkOyBoLauvvrrXPID70Y9+5HU2xkIIIRob/mHJD+233357r//1r395/e6773rNYwag+D7OP0r5/sL6hRdeaGuxG4LQWDLPmG3q1KleH3nkkV7zGIB5++23ve7WrVvRZ5tttpnXHNeRI0d6/dBDD3m93XbbeT1o0CCvOd7V/s3SnhSD+QA2ptcbpe+J+qK4xIniEieKS5woLnGiuMSJ4hInikucKC5xorhERHseEPwdQG8z29TMVgNwLID7K1Ms0Q4UlzhRXOJEcYkTxSVOFJc4UVziRHGJE8UlThSXiGhzioFz7jMzOwPAo0iWoxjunJtWsZKJNlHtuIQsOnlyoTkN4fnnn/f6zjvv9JrtUZyTCwBrr72219OmrfhKZ599ttc/+9nPSh6LCZW1Evk8IWJrL62dp2C33Xbz+vjjjy/6bNiwYV5zKgHb2NpTn9VMMah2XN5//32vr7nmGq85lWP//ff3muuP0wouuOACr8eMGeP166+/7jXb4YBiS9u3vvUtr4855hiv11hjDa+feOIJr/v16+f1pEmTvOb0kgsvvNBrzm+sRDuKrb1wX8Q2f54Tg/sVji/XMVAcY64rTtngWL755pslz10PYouLSFBc4kRxiZPY4jJr1iyvt9pqK69Defarrrqq15988knRZ5xayOM5nh+Kx+J8LE5t4/Fbrah2XHg8wvM4bL755l6vu+66XvP4jVNmN910U68POeQQr9955x2vs3M38X2fYzF58mSvOXWEx4s8vurZs6fXPH8b/z6qFO2ag8A59zCAhytUFlEhFJc4UVziRHGJE8UlThSXOFFc4kRxiRPFJU4Ul3hoT4qBEEIIIYQQQgghmgStYiBaRcgyzLOe//nPf/aal3CbMmWK1zwT+4Ybbug1z5zP1iegeKZXtmHdcccdXt9yyy1eb7TRRl7zzJ9XXXWV1zybaHtmO60HlbLth47D9c2Wc441AAwYMMBrtsTlWeYwD7HWPxOqz+uuu85rXjGAZ8TlZQf5OuX6Z+saz6DL77NtDSie9Zit6Wxj4zbGNru33nrL67333ttrTm8YPXq014MHD0Yzw6ur8NJTnD4QWsUgmyLD1wfbQ0OpNDNnzvSaU32EaAvOuVbf69gey/06p9Lw9c/2XbYz8/b8ft40Mt4ntIQba7YFcwpQaHveZmVdpUXUHraKc2osX+8LFizwmq/NbNvhZZDfeOMNrzlVjbdhKzyvSMX3/WaBV3XYcsstveb7ON/fv/a1r3nNfdexxx5b8piclsGrU2XPx6tKzZ49u+Q2PF7kPmrOnDle8xLK48ePL7lve5CDQAghhBBCCCGEEHpAIIQQQgghhBBCCKUYiHZw1llnec1Wak4f4JQBts+wZYZhS1V2tQG2+LCtiu00/D7PQPr22297vd9++3nNVqE//elPXjeCrb098PdjzfFiuF779u1b9Blb3xi2W7HllOPYLISuF7aoHXzwwV7z6gOc5nLzzTd73a1bN6+32247r6+88kqvOb0jy6JFi7weNWqU12wdZDsdz6R81FFHec3taNCgQV4//vjjJc/bjG3nySef9JqvX7Yw8zUemi0ZCK+iwiklvP+ECRO85v5KiGqyZMkSr7n/4Bm82Z4csvOH0gf4Gg+lHmRf83ahe0pom9DYgO95bMPm8Q2Paaq5qo5YOeGVgkKrg/Xo0cNrHj/zqgVA8T2dUwtDKYec5sblaMYUg+985ztecx1ssskmXnN9htKSOH358MMP9/qvf/2r13369Ck699NPP+31oYce6jWP7ThNi/tTZptttvH6n//8p9cnnHCC13fffbfXPAZtLXIQCCGEEEIIIYQQQg8IhBBCCCGEEEIIoRQD0UqeeOIJr4cNG+Y1ryrAVlm244Wsf2zdCdkJgeIZ1/kznmGZ32frINts2Kp15513en3SSSd5zbODNiMcF66n5cuXez106FCvH3jgAa/ZHgUAL7zwgtdsybr44ou93mOPPbxuy+zVjQTbxNjKev/993vN1+Arr7zi9a677ur1ww+vWAqYZ7LnlQ7YJsez2ALFK0/wrMccS15BYd999/Wa2xHHt3fv3l5zag+3+VD6UCPz2muveR3qrxi+rrOrsYSuf56VnVcD4ZmohWgvZpar373mmmu85lVNuE/j/oNnX89e83zuUrrcPYH7llAaDu/D4wG2W7OVOpRWx6mIPDY47bTTSu4rRCXgFDZejYjHrXzd8T1h3XXXLTrWsmXLvOZVxDbYYAOveSUjHotz224WuO3ySmr9+/f3muuD+w8eN/H73NdxHW+88cZeH3LIIUXluOeee7zeZZddvOaxFqc6cEoIr1bF4w9eAY5TRO+66y6v+XdNa5GDQAghhBBCCCGEEHpAIIQQQgghhBBCiJUgxYCta2zhZMtudjZutp6sscYaXrOdNzTbO8PWEbbGhcrHswazVSUmrr32Wq+5bth+E0ofCMH1FJrhO7tdaCZ8Ph/HiG3fvC/PtH/FFVd4zfbClYkf//jHXk+dOtVrXoGCracAsPnmm3vNtvMzzjjDa7Z2cVzYotos1k22svKM3zNmzPCarazc7g866CCvf/CDH3g9Z84crzl1gK2/Wdj6xjazadOmec2xWHvttb3meHEb4WOyDZ6/czOmGDz//PNe83XK9xS2VXN9cJ0BxbZFtpByv8R9K18fQlSaUL+7dOlSr3m1Ara78viFZ9QOpRLw/Z3bTrlVDJjQZ6F0hZDm7T/66COvuQ2//PLLwXKIMDx24rjyfatXr15e83WwsjJ//nyvOcWAf6dwe+R2xPea7Gd8LL7v8Db8Po9LmgVOhea2zr/72Kpfrv8pEEo3WG+99bz+xz/+UbTP1ltv7TWnRLHm1RG4XXCqFI8NeDWsH/7wh163J62AUcsUQgghhBBCCCGEHhAIIYQQQgghhBBiJUgxCM3Wy7PxZy3TN954o9cvvvii16uttprXbKNnCy6fjy1BbFthux7bs9lKOmrUKK8HDBhQ8jvUg+nTp3vNdjyuD4YtZnmshuVmVw6tcMD7s72Z0wr4fd6e7TrPPvts8NzNRsjWx3Fk6xRfs926dSvaZ8011/SarwmOMa+OwNb00Czujby6AV+nY8eO9XrRokVeb7vttl5vv/32Xj/zzDNec9/z5ptves2rCuy9995eZy2xnBLFdroHH3zQ6759+3o9cOBAr7lPGzdunNc9e/b0mm15oZSfZiE0ezq3F36fZyDm1TwA4Le//a3XoXQnfr8ZZ5YW9eOLL74I2vtHjx7tNffZfJ9km26o/w7d90OaKdf3hz7Lk1YQWlGJ3+c0q8WLF3vN/S+njTU7XDflUgD/+Mc/es2pdLw/p6dyauF+++3nNa/us+OOO3rN42S+FnmM0miE0o55PMWpnZyOxrPuT5o0qWj/0H0kZJ3ntAIeDzQjI0eO9Hq33Xbzmts3r/bAfV2nTp1KHjP0u4bHuUDxWCEUi8mTJ3vNbYevCV5RabPNNvP6pz/9acljtgc5CIQQQgghhBBCCKEHBEIIIYQQQgghhFgJUgxCtiieiZftS0CxTYQtTzyT5LJly7x+7733vGaLNVt92OIemq2aZ8a84447vC7YSNgyXC/YPsZlb61VnN8PrTRRDt6ONc8iyhZBPkdopYRmnME1RKie2boWSsXgbQCgc+fOXvM1zJot11nrVbPBtrRDDjnEa7YCsn2XZ67ltIIFCxZ4feqpp3p9++23e82WwCOPPDJYpuHDh3vNK02wpW3dddf1mlMJsrPwF9h555295u/DVshmga18PDsxtxG2EPLM0kOHDi06FqePzZ4922u+1/CxOJVDiPaSHROxvZZTCBnuy0P36+xs6qUI3XfKpR6ExhA8jgqlOIbGGaHz8fa8wgvPzH/eeeeVPFczUi7FgMdXfG8LjWn5nsLH5fsLp8k9/PDDXvO4ev/99/f6/PPPD5YvdnjVD05t4fERX9cLFy70mlMRs/f9WbNmec33Kl4ZjY/LKx1k00ebgdA1zHXDq2rwuIvrhvu30Cp2fC6+9rNwP8j9Eo+d+H1erYp/B3L6ZzWQg0AIIYQQQgghhBB6QCCEEEIIIYQQQoiVIMUgZGljO3l2NlG2oXAqAWveJ2RLY7sIz6jPZQpZstlmVLD9xDBTOM8+y9+Py851wHUZsviF7DZ54X3mzZtXshwMzwrOqR+cQrKywnXAKxeUSxtheznb1NmSxWk4IfKkozQCbB3k1VKOPfZYr08//XSvOd3psssu87pfv35e82zGbHfn+uaUJqC4XZxyyile77DDDl4//fTTXnOqCPePvMoCp0yw7Y1tojwLcLPAKzzceuutXnM/xn18ObsrpxKwHZStuWwnZfujCMP3x1AaWTn43vHGG294zbOsM3lneI8N51zw/sv2WiY09uD7J/f3ofrIM4bJ9vd5Vi7g8VjoXsXb84pUoW14fDNlypQWy92MlEv55FW6QnXO9xEed/HYjFOouG/ka4XHl6ExZVvafD3hVY1CaXn8m4PTEDiN8eqrrw6eg2fe5/bJ5+N6Do2ZG5k8fTOn+vH4hX/vrLXWWl5zXYBQx6kAACAASURBVPK1n/caDP3O4X6Mz8HlePXVV0vuW437kRwEQgghhBBCCCGEaPkBgZkNN7PFZjaV3utsZmPNbEb6f+kFIkXVUFziRHGJE8UlThSXOFFc4kRxiRPFJU4UlzhRXBqDPCkGIwBcDWAkvXc+gHHOuV+Z2fnp6/+qfPGqR/fu3b1+7bXXij5jKw/baNnywXYOtuiEbCH8Ps8gyrYVtoWw3bSwDVu6UMO4ZFMwCrBNj23mDNvUuc5au7oBEE5FYFsP78/2R647jgXHOlS+Vtp1RqAB2kvIOsg2QL4GeftsfXD982chuxRTw7SCEahRXJ5//nmveYUUtgLybOEHHXSQ19yX8MzNDz74oNecYsAWRF7BAwDmzJnjNdvU2T7N6QZs7xw5ckU13XfffV4fcMABJY/TDnvnCDRAe9l999295n6F4TayxRZbBI/FKRsTJkzwOnQf4fSSGjICDRAXJnQNcroGz4zO1zVQHD+2lE+bNs1rtuy2x8Z56aWXljzXsGHDvA6sXjEC7YxLhw4diu7XZ5xxhtc803nIBsv1HBobhPZtS78eui+zDsWeY5Sn3NzuOGWL7eCFFXky99ARiLS95BnXhK7lJUuWeJ2tM7ap83Yce76euD753sSrIfD2ofF2qP8NMAKRxoXTLvna5N8EbPnnfmi77bbzmtMMs4TSmXnlJE4r5f6tyoxAneMSagtXXHGF1z/5yU+85hTM0GpfTDadKs/vFI43/2apVwpbiw4C59wEAO9m3j4UwM2pvhnAYRUul2gBxSVOFJc4UVziRHGJE8UlThSXOFFc4kRxiRPFpTFo6xwE3Z1zhdlsFgLoXm5jUTMUlzhRXOJEcYkTxSVOFJc4UVziRHGJE8UlThSXyGj3KgbOOWdmdZ9mvLWWcLbpPvbYY0WfsbWJLbxrrrlmyfOxRYfTCnimUbYNsdWHbVdsxx88eHCL36EclYxLwVKXJWRRC80WzPURSiXIOyNoHkszn5ttbF26dPE6ZDVkqz2nIbSXWreXkKUzZIviGfXZ4soztLNFGii2RXH6DMe1LbNXF6iFvaqSceFZZrn/YCvxoEGDvP7+97/v9UMPPeQ11+v8+fO9Zrsr2954FnYA6Nq1q9dsZ+Ty7bvvvl5zjL/5zW96PXnyZK+vvfZar/fcc0+v2SrPKx20l1juL4WVZIDifprhvqTcygO77bZbyfdDtuzQ9vWkvXFprdU81AdwP/33v//d6yeffNJrtvN/4xvf8JpXGwGK2xu3HdZDhw71+txzz/Wa07EY/p5HH3201zNnzvSa700/+9nPvL755pvRWvLE5bPPPivqi0KrAYTu6a21qYf2Dd33yxE6d2j/UJnyWHw5xYvb/LPPPgsA6Nu3b64yp+erWz+WJ0bMAw884DWPhV966aWi7ThF57jjjvP63nvv9frRRx/1mlPgOG2KU9v43sbjNL438RiFrd7ZFLs81DMufK2xtT+0esPLL7/sNacblGPIkCFejx071mtuLzxODvVjtaaeceHVoxgeQ+VpR+V+o/D+HG+OBcNpqLWkrQ6CRWa2AQCk/y9uYXtRGxSXOFFc4kRxiRPFJU4UlzhRXOJEcYkTxSVOFJfIaOsDgvsBnJjqEwHcV2ZbUTsUlzhRXOJEcYkTxSVOFJc4UVziRHGJE8UlThSXyGgxxcDMbgPQH0BXM5sHYCiAXwEYbWZDAMwBcHT4CImdq1I24ZAtLc/xX3jhBa+HDx/u9TrrrFO0HVs+2PrD5w5ZqdmKxrYottdzudnCxbORtjRzdSXikheeBToEW/byxCWPvTCvDbW1dp885Xv77be9bk2KQS3jkseSzzq0Pccimz5QijzpAkBxnWdW4GgVlVjRoJZx4T5j6lS/ik+RXbB3795eL1iwwOvRo0d7vddee3nNFve5c+d6zTZYTgUAitME2Op52GEr5v4ZN26c1zwr9ZFHHlmyrGxtHDNmjNe8ukFrqGVc2gOnl7FmSzbfE8qlGIT69pAlkdPhakWl4sL1w1bu9owHeCWCW2+91WtePaRnz55e77TTTl7zfThrJeX2w+Xbeuutvb7xxhu95nQD3obTfnilD7ZSs5WXr5Vs2kOWSsTlzDPPLIrFySef7PWdd97pNfdjoZnw86YGlNqX7zvlZqbP0//nuZ5CKxrwd+A2zH0rjxELK9BwikG1+7E8KbR5tuGxHG/PK3lxH8+rCuyzzz5Fx+Jz8L3jpptu8vrKK6/0mlPbeBUfvs74Psf3S151g9sUp+eUSjGI+f7C40q2lrMOjZu22mqrXOfo37+/1zwG4Guef3fw9V9NYo4L98ecPs73slAqQF5CbZVT1Pkcs2fPbvGY1UjFbfEBgXPuuMBHB1a4LKIVKC5xorjEieISJ4pLnCgucaK4xIniEieKS5woLo1BW1MMhBBCCCGEEEII0US0exWDPOS1PoTsZyE7WAi29f7hD3/wesaMGSWPk509msvB5+YZk/k78WykDFtE2K7GNkc+Ps/IypaqSs6i3xZ49s4QXIdsDavFzPRsi2L7b8gCxxb5PLP5b7755hUpZ70JxYJn2udZ9AcOHOg111k2dnyd83Z8PrZO5SlTIxOyhLNFje3NfK1xXXI74lSAEJw6AAAvvvii15z6xLO9v/XWW17zqhUhuzbb47fZZhuvd9111xbL1yxwigfXGbPRRhsF92e7Mq9iE0rd2XTTTVtbxGgoZx0vBd8Dhw0b5vXtt9/uNffxfP9kqzKv+sHtiNP+OL0vux3fczkunD7A23D/xudm+y7HOjSLPq8YxOONSnLssccWrZLE90/+Ttn6KUUohS20Ikel0gXyHiuUThgqXwi+zlpKA6kGoXrOk+5xxx13eM2pk7w6xxVXXOH1zjvv7PXee+/tddZWzemIPF79zW9+4/WkSZO8Zus23494bMzfgb/bJpts4jWPR2+77Tavf/GLX6CR4LbG/Qp/b06h2H333Vt9Dr4P8TXEfdH666/vNacTrqyEVi8J/S7Mm3Lbnt88fM+rJXIQCCGEEEIIIYQQQg8IhBBCCCGEEEIIUaMUg+wqBnlWIgjN6Mx2uIkTJ3p9ww03eM0zPrI9nO02bJ9jWyNQbBcMzbTLaQVsTeRys5WUj8lWY9ZsnWKrYb1TDEKWOrbWsHWTZ2jmmIZmCA7N6FnOQsjb8TUUSh8IzabN6R5MnpUbGo1QG+RYsP3897//vdc8czDHGgjb4q+66iqv2arI5w7FuxozslYTvo7OP/98r7t06eI11xvbM++66y6vefWAJ5980mtOQxg0aJDXfF0PGDCgqEwcS+7vuD1z38L1/9xzz3m97bbber1kyRKvOYWBz8UzJzcjPLM3X+98za611lrB/bm95bE9t3am+JiYNWuW14888ojXPGs69y28ogcTqs9sX1SA6yyUCsB26yx8/2W4jYTSrngMEEq9C913SpWP+5BK0Llz56I0KE6D4LiwrTV0X83TZ4dW1QkdJwvXYWvt9XlSHENpMKE0kNamzbSVUN2GNMOrUfB4mNPFuF5POeUUr3nmdraib7HFFkXn4D5/1KhRJc89cuRIrzkdgFf04LbGceTxM6fb8Hhjzpw5aFT4PsD3cU755N8m55xzTsnjZO8bXIf8m4frjVd84LRBHhtwCuHKSiXbep6+kq8Dvo/wilHtOX5radyRhxBCCCGEEEIIISqGHhAIIYQQQgghhBBCDwiEEEIIIYQQQghRp2UOQ/linE84ffp0rzl3cfLkyV5zTh/n2vTp08drzuHhnA7O9eMcPKA4947zFHl/zvfgfELO8+Gce96G80z4ff4+nFvFS7zUg9AcBFwH/J14DgKu59B8E61dKilLaA4C3p+XK+F8Ns7N5vjy9dcscD3z9+Z48RJHnLvLeXG8RB9Q3G4555ivCc4n5BzHZoHnrOD2ym2a86u7d+/uNS8txMtx8jXL+x599NFe8/JS2XbKeaWLFi3ymvsc7h8515nzVnl5WI4vX0/cZ/JcKtm+tRng7xqaf4aXEMvCMQ4tEdoMfPHFF/j1r3/tX/OSmtwHcx0y3H/wvkxoSSquS74H8TXL/V62TKE8bIbfD81JFLoX8jwWvC+352rRtWvXoqWgeT4Uhu+fHItQfitf/6F7emhuKT5XuWWnQ+cOzWsTOk52yb5S+4bOy8vCVZLsXF158oi5r+U+m+cB4Gttv/3285rHzDzfDd/PH374Ya+zbfD111/3evz48V5n21UBvj/xOIO353sTj59DcJsNzUcSK9ymeG4fvj9wfWTngChQbv4Ovg/xsXg8wNcEzzckwv1KLe7VfO5QH11t5CAQQgghhBBCCCGEHhAIIYQQQgghhBCiRikGWebOnev1Nddc4/W8efO8ZjsML8nB9i62q7Edie2BvEwFW/zYBshWn+x2fA62/rAVkK3YbJdi+xeXiW2RIYt7rZbSyQPbkNlmw5YutlueeuqpXrPFdIMNNqhWEUvCFh0uH19/bPXmuCxdurTKpYsHbgtcTzvuuKPXd999t9fHHXdc0f6cDsMpQKFUotDyYI22tCHTqVMnry+66CKvp02b5jUv+cTtm62DbP3j+ujVq5fX3MfwsmRZW3vnzp1L7s9pU2xPZOs8L1X4/PPPez169GivTz755JLfIaa+qxqE0pg4XuWsmnwfaea66tChA4YNG1byM76/c/oSL3nGS3suXrzYa77X8/s8fuAxQ8iCy9Z+oNh2zm2H21VouTvu6/ia4Hskv8/n4nLwd+O0rErStWtXHHTQQf41399Ddch9Tna81BKhPp7rL7Tsbvaz0LlDyzCGllXk649TU/KkPlbLyp69/7F9/pVXXvGa09nYms7bf/e73/Wa64/7fl6m8LrrrvN6yJAhXvN94LDDDisqH38WSiuYOXOm15xKN3/+fK95/MxpD/w9OVWNY81jl8L3z7brWOHxcGi5W/6u3bp1K3mccsvgct1uuummXvOY7S9/+YvXXP+sVyb4NxkTWr62LcsQh5bLDaU+8biwlshBIIQQQgghhBBCCD0gEEIIIYQQQgghRA1TDNgK+7vf/c5rtiZtuOGGXrMFg21UbO8KWTt4X7b2s5WRrXzZWXNDM1Ty+2xDCdlF2CrHVh9OYWBLCWvevt6wLY3jxXZQnmXzpJNO8vp//ud/vGb7eiVteiFrOtcz26V4JnYuE6eN8L7NTmi1CLbA8fXes2fPou1CM7aHUkq4vbTFnhU7XFfcH3AaAttBb7jhBq8PPfRQr2+++Wav2cLPs0FPmDDB6wsvvLCoHH/84x+9ZhstE0op2Xvvvb3mWbB32mknr3fddVevuX2FbHLNAqdrsD2bLdPbbLNNcH+ORWjVm2bg888/L0oBYHs4X3dspee+ZKuttmrV+Th1jNNlQilN2Rn1uf65rLxd1v5egPuxULoBw9cKl4nPW62ZsldZZRX85je/8a9vvPHGkuXiFA++N3Ldsp07VAdcZ/ydeAzA25RbvShU/yHLbyjdYK211vKa0w0Y3obHkaGVGCoB9+e8egzfL0IraHEZefy4yy67eH399dd7fe2113p9+eWXe33OOeeULNuYMWOKXvM9IrTiQ+hez5rHkdwv8HXG91S+5nr06OH1m2++CQDYeuutS5Y/Nvj6YkK/CX772996zWODvKmZfN/hds73MB4zDB8+PNdxm4033njDa04H5HZfyb45dFyOPfdv/NsklNpTKZpvdC6EEEIIIYQQQohWowcEQgghhBBCCCGEqE2KgXMOV199tX/Ns/szbEcMzQ7N77O9iq15bMHIk5KQta3x65DlL8/5uHxs6WFLSciix7P/jxo1qmS5awXbC9lyw5Y2toOFZj8NWaHYhlbOXhjahzXHjmfB5Rl42VLFdm3el2fHjZXWzvofsgGG6NKlS8n3eeUHoHhGYr7O+ZpodjgN6tFHHy35PttEue2wdZP7mFB/yP3Elltu6TVbRgFgs80285pnJ+dzM9yncbtgyx2nG/HKFtttt53XRx11lNfNmG7AcWS4/2CrbBbu/3k7jgtbZxuVjh07FqUZcZ8aspqH0gAZ3pf7G07hCdmZy/WBefqr0H2HybMyS8iGze2lcD1VY0UdnhV+6tSpJd/n+gj1Y6FVAjjW/D4fn8cSbCHPjsdCceH+KpSyEVppIlTnofQw3n733XcvWZ724pwrsu1zCtdbb73lNY+feSzDM51zvF544QWvOT3q7LPP9nr69OleP/XUU15zefr27VtU3rFjx3rNbZhtz1wmTiUIpQ/wvYbbM9vjORbcR/ztb38D0DgpBgyPqXg8xf3ngw8+2K5zcJvkVQw41eGYY45p1zmagYkTJ5Z8n/uSSqYYhO4FPE7gGHF73muvvSpWjlLIQSCEEEIIIYQQQgg9IBBCCCGEEEIIIUSNUgzGjx+Pl156yb9mCxLbaRi23rM1JmTHCFn+Q1ZxtiZlt2HLEx+X3+f92brGNhSGbXOhbdZbbz2v2ZpV79mtuX5ClmG2o3M9MaEZiENWzXKE0hLYlsOWNrZqbb755l6/+OKLXrPNqxq2zkqTx+LaHtgGyHHnWceB4tmW+doO2QJbG++2XB+1pjCDMlDcZ3B6Ds/Qzhbyc88912vuJ3fbbTevOW1n4MCBXi9YsMDrZ555pqhMbFHlfSZNmuQ11y1/B24jhxxyiNcFGydQPFP/lClTvOaVGJoRji/DNsC8q3NwWwrNVM52xmrOoF5t+J7OVHsmZvFleHzB/TfbyNk2ztc2p8XwcTi+PJbh1BlOK+B7MtvJuR8CitOauL2EZoFnQu2Q75Hcvvj4bNO///77vb7vvvsAVH6M8OmnnxaVl++/vXv3rui5snDfw+llPPbM2qr3339/r0N94rBhw7zm78bxDo2x+Xrifo/LxHEsbN8I6aFZDj74YK8vuugirzlNkMcPnGbCaTvl4Phx+jOPk0MrejQjoXEyp86EfreFfuPkOX6W0PiWz8f6zjvv9JpTDCo17mdaHMWY2cZmNt7MXjGzaWZ2Vvp+ZzMba2Yz0v87tXQsUTkUlzhRXOJEcYkTxSVOFJf4mDdvHhST+FBc4kRxiRPFpXHI82eOzwCc45zrA2APAD8ysz4AzgcwzjnXG8C49LWoHYpLnCgucaK4xIniEieKS2Skf0VSTCJDcYkTxSVOFJfGocUUA+fcAgALUv2+mb0KoAeAQwH0Tze7GcDjAP6r1DH22msv7LDDDv41W1o6d+7sNVtgQrPZswWGrURswWB7W+g4bB3JWjPY2sT2x3L7FGAbFduy2SIVsozydwidt0Al4pKXPBbvb33rW16HZvkOxaIt1pg8+4TKzTPz8kzsXP9tTeuoZVwqVZ+h45SaUbsUbHcLpSKE6jM0O3+lqXZc2I4bmkE6ZBPlevrud7/r9axZs7xmO39oBujBgwcXHZdTPHgW7AEDBng9d+5cr/v06eM1961f//rXvWbLI1uBOWUij/2uQC3bS6UI9eV5LM9ZZs+eXfL9eq/+0IhxaXbWX399OOeeA9ofE+5rjzjiCK9DM8CzzZ/TCvr16+d1z549veb76sYbb+w19w28sso777zjNfdJQHHKKI//QisfhMZgnN7AaRJsceeVY+666y6vx48fjxCVikvWph9aUYEJ2ZCZUFoS33t5vLntttt6zfWdLQOnWPA5ePzBqXGVur+HViIp1F/h3lXJ9lJtBg0a5PUFF1zgNdcZXx98bQ4ZMiTXOXgssskmm3jNY7NQqkgliT0unKrJY6jW1lPedMDQ9RxagYVXHKk2rWqxZtYLwM4ApgDong4iAGAhgO6B3USVUVziRHGJE8UlThSXOFFc4kMxiRPFJU4UlzhRXOIm9wMCM1sLwF0AznbOLePPXPIIJP6ZxJoQxSVOFJc4UVziRHGJE8UlPhSTOFFc4kRxiRPFJX5yrWJgZqsiCeQtzrmCd2yRmW3gnFtgZhsAWBzaf/XVV8cll1ziX48bN87rxx9/3Gu2WrB9ia1QPNN8HgtHHnt81pId2octJmy9CllEmJC9KpQywZavkD27vXHJSx4beP/+/b1etmxZyW1CNrk89VduH74OuHy8DaeNsC2SYUtPe2bCrVVcQtdpa6/5UFxCq0NkYUs91zNrtmSFVjTg83H52pKCUopqxoX7JU4B4Jm6f/KTn3BZvD7ssMNKHnOPPfZo8bxbbbVVrvKFttt+++1Lvh9qk5wOwSkGIdt9HmrVXirF2muv7TVf19nVPfLQrVs3rzkNhPuiSl3/raXR4rIyUKmYcFrYwoULveZxF1+D66+/fknNbYFTCdimzpbY0Kz43N/stNNORWXl1AXen8vK34fLzfcUvqdzW+NVXTjF4NJLL/WaxzelqERcVl999aLvx2XnFIpQSmDoHsvfm9/nsVLomKG0hWyZLLC6GKfeccpEaDzB74fGCaHxTaljNkofxm2K0zJ4LM33l8suu8zrvCkGnGLDbY+vOe4Lqkm94pLntwanwHOKQZ7fL6F2lN0uRKmUGaC4Hb7++ustHqctv6lKkWcVAwNwI4BXnXO/o4/uB3Biqk8EcF+bSyFajeISJ4pLnCgucaK4xIniEh/poE8xiQzFJU4UlzhRXBqHPA6CvQGcAOBlMyvMcvHfAH4FYLSZDQEwB8DR1SmiCKC4xIniEieKS5woLnGiuETG5MmTAcUkOhSXOFFc4kRxaRzyrGIwEUDIo3Bg3hPxagU8Uzdrttu/++67Xn/wwQdes62MrVN57B+h97PbsFWJZ7sNzSoZskOzpYrPwTN+s42EZ9xdd911vQ6sYlCRuFSKXr16ec02PYa/a54ZbctZY0J1HrL4cMrGFltsUXIbLlM5a105ahmXSq4KUQpuB+VmVefrPNQuQiuUhKyJlU4xqHZcttxyS6/POOMMr++7b8VD8NAqBjESqvPDDz/c6xkzZni9yy67eN2pU/7li2Prx/LAq+Twtc99dl54dR9O2eAVEaq5ukeIRoxLs7PnnnvCOVeRmPC9mHVotRpeUYX7AE6RueGGG7z+0Y9+5PXQoUNLHp9XRuBUhaeffrro3GPGjPGa2wKvbhCa8Z/Hjjy+5PbFKV6//OUvvWbbdzkqFZcOHToUpeXlsS6HtsljMQ7dh/n9culioXOExtyhlSbyEBpXMIXxSuF6rmR7qSV8T0h/TAMoHmNz6gZroNgWz/CYNjQW53ZeLWKPS57fFtwuuP5CKc7lzpHn2mZas0pUe6n9yEMIIYQQQgghhBDRoQcEQgghhBBCCCGEyLeKQa1gO/+GG25Yx5IIhi1LoRUVeIbUuXPntnjMUIpHOWt5nnQRtk6xFXj+/Pkly8qELHqNQDVmOue0gnKWQN6OrZtsKeTrJk9aAVNuZthYYPvq7NmzvWYbbSVX8ag2oTLxTOXczrt06eJ1ntVlGhn+rnxdt2UVg80337zksfLam4VoC5zyySutcGon91fcv1188cVesx365JNP9nrgwIFeDx48uOTx+bw8e3o2RWnq1KleH3jgCgcyj0vYms+pPmzLHjBggNe8ykIorYKpRx/N52n2PrWSZC33sRK6pk488USvH330Ua95bMurG2RTcriNhM7H1zyn39bSvh4rofSB0Aogof4gO94LjaFD41seD/C525r+3BbkIBBCCCGEEEIIIYQeEAghhBBCCCGEECKyFAMRJ2zfY9sM28mZOXPmeM12frbG5LHw57XysXWHrXi8/z//+c+S2zBs4WoEW3uemf7zpGXkOT7HPWtDC33W2hUKQt8hFtt9OV577TWv77nnHq+ffPJJr88888yS+8aYYhCCbW8jR470mtvXaaed5nUjrdyQJRQXtmfzNtxPho6TPRanKzCtWQlCiNay2Wabec0pA2zPfv/9971esGCB10uWLPGaV96YNGmS12eddZbXoXsCjx94ZaHTTz8935eoAnzfr8fqIWLlIXR/2WOPPUq+z6t28Bj2lltuKTpuKMWAx9/Lly/3mu9B/H4zkmflDe6L8qzowWMi7jOyvyFCK0eENMPH2nHHHUtuUw3UAwohhBBCCCGEEEIPCIQQQgghhBBCCKEUA5EDnp2brS6hFIOXX37Za7ZFsX2J7TYhW3Vei19ott8PPvjAa7Z6M7xaBluI9txzz1znrid57OihWViZUJ317NnT63HjxgXPseaaa3rNM1OzXbWR0wfywDNns9W8X79+XvOqGkwj1QHPrs/fedGiRV5z225kQnbEUFpAKL7lUgx4lnWG61aIWsErA7Du1q1bPYpTc0Jjjkbqo0VjELqmePyw5ZZbes0rcfHYm1P9AGD48OElj7vVVlt5PX369JLne+edd1oqdsORJ52W06m4nkP9Hq8Cwavv8e8dXt0LKB4n85ibV5Fg+Fi8asXixYu9rnZ6qhwEQgghhBBCCCGE0AMCIYQQQgghhBBCKMVA5IBnzfzzn/9c8n3mvPPO8/rUU0/1mq1MeawxeaxBWfhYPHtyyLLLNp733nvP665du7b63LWmPZYi3pfTRkKz5rKN6qOPPio61mGHHVZSf/zxxyV1aBWJRrZxdu/e3WueRfjpp5/2uhlmxeZ2wWk4e+21l9ecktSMsL2QYUs2U64f4+uGYTuiEEKI5iLPeIfH2M8884zXvDpYaHb9LLzSEI/HOPX3X//6V65jNRKh1QoYTgfg3wo8BuZxDa/kwtvwChQzZ84sOsfs2bO95jE3x4LTM7msnLrLKSV5VgprD40/YhVCCCGEEEIIIUS70QMCIYQQQgghhBBCKMVAtMzpp5/u9Xe+8x2v2XYeolOnTlUpUx5Cs4My11xzjdc8sytb5ZuF1tqR2O7EaQFZqzxb1PgzPi6vaNBa+3RbUk1qDafP7Lzzzl7PmjXL67XXXrumZaoGq6yy4pbBdsQePXrUozhVJdQu/uM//sPrKVOmeH300UeX3L5caknfvn29Pv74470+4IADcpdTCCFE4xIaj11wwQVev/vuu17z6lvnz8qwNQAAA5BJREFUnHNOrnOccsopXl9xxRVes8X9hBNOyFnixiS0qhf/luHfAQxvf8cdd3g9adIkr8866yyvs6sa8eoIrO+9916vedWrI4880us8v2WqgRwEQgghhBBCCCGEgFXrr3NLly6N/89+Dcw666zTplkoFJfqorjEieISJ4pLnCgucaK4xIniEieKS5woLnGSjYscBEIIIYQQQgghhNADAiGEEEIIIYQQQlQxxUAIIYQQQgghhBCNgxwEQgghhBBCCCGE0AMCIYQQQgghhBBCVPkBgZkNNLPpZjbTzM6v5rnqhZltbGbjzewVM5tmZmel73c2s7FmNiP9v1O9y1pAcVFc6oXiEieKS5woLnGiuMRHI8YEUFwUl/qguMRJVHFxzlXlH4COAGYB2AzAagBeBNCnWuer1z8AGwDYJdVfA/A6gD4AfgPg/PT98wH8ut5lVVwUl3r/U1zi/Ke4xPlPcYnzn+IS379Gi4niorgoLopLzHGppoOgH4CZzrk3nHOfALgdwKFVPF9dcM4tcM49l+r3AbwKoAeS73pzutnNAA6rTwm/hOKiuNQNxSVOFJc4UVziRHGJjwaMCaC4KC51QnGJk5jiUs0HBD0AzKXX89L3mhYz6wVgZwBTAHR3zi1IP1oIoHudipVFcVFcokBxiRPFJU4UlzhRXOKjQWICKC6KSwQoLnFS77hoksIKYWZrAbgLwNnOuWX8mUs8IVpPsg4oLnGiuMSJ4hInikucKC7xoZjEieISJ4pLnMQQl2o+IJgPYGN6vVH6XtNhZqsiCeQtzrm707cXmdkG6ecbAFhcr/JlUFwUl7qiuMSJ4hInikucKC7x0WAxARQXxaWOKC5xEktcqvmA4O8AepvZpma2GoBjAdxfxfPVBTMzADcCeNU59zv66H4AJ6b6RAD31bpsARQXxaVuKC5xorjEieISJ4pLfDRgTADFRXGpE4pLnMQUF0ucClU6uNnBAK5CMvPkcOfcZVU7WZ0ws30APAngZQBfpG//N5KckdEAegKYA+Bo59y7dSlkBsVFcakXikucKC5xorjEieISH40YE0BxgeJSFxSXOIkpLlV9QCCEEEIIIYQQQojGQJMUCiGEEEIIIYQQQg8IhBBCCCGEEEIIoQcEQgghhBBCCCGEgB4QCCGEEEIIIYQQAnpAIIQQQgghhBBCCOgBgRBCCCGEEEIIIaAHBEIIIYQQQgghhADw/wEk6wP0rWpuAwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1152x864 with 10 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random \n",
    "\n",
    "fig, axs = plt.subplots(1, 10, figsize=(16, 12))\n",
    "\n",
    "for i in range(10):\n",
    "    rand = random.choice(range(x_train.shape[0]))\n",
    "    display_fashion(x_train[rand], y_train_translated[rand], axs[i])\n",
    "\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network import MLPClassifier\n",
    "\n",
    "clf = MLPClassifier(hidden_layer_sizes=(100, 100), max_iter=500, random_state=42)\n",
    "clf.fit(x_train, y_train_encoded)\n",
    "y_test_pred = clf.predict(x_test)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Micro FScore = 0.8599999999999999\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F</th>\n",
       "      <th>Support</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ankle boot</th>\n",
       "      <td>0.949721</td>\n",
       "      <td>0.939227</td>\n",
       "      <td>0.944444</td>\n",
       "      <td>181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Bag</th>\n",
       "      <td>0.938679</td>\n",
       "      <td>0.947619</td>\n",
       "      <td>0.943128</td>\n",
       "      <td>210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Coat</th>\n",
       "      <td>0.783251</td>\n",
       "      <td>0.783251</td>\n",
       "      <td>0.783251</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dress</th>\n",
       "      <td>0.899441</td>\n",
       "      <td>0.870270</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pullover</th>\n",
       "      <td>0.772222</td>\n",
       "      <td>0.772222</td>\n",
       "      <td>0.772222</td>\n",
       "      <td>180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sandal</th>\n",
       "      <td>0.939891</td>\n",
       "      <td>0.934783</td>\n",
       "      <td>0.937330</td>\n",
       "      <td>184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Shirt</th>\n",
       "      <td>0.652406</td>\n",
       "      <td>0.606965</td>\n",
       "      <td>0.628866</td>\n",
       "      <td>201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sneaker</th>\n",
       "      <td>0.912442</td>\n",
       "      <td>0.942857</td>\n",
       "      <td>0.927400</td>\n",
       "      <td>210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T-shirt/top</th>\n",
       "      <td>0.773109</td>\n",
       "      <td>0.807018</td>\n",
       "      <td>0.789700</td>\n",
       "      <td>228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Trouser</th>\n",
       "      <td>0.972973</td>\n",
       "      <td>0.990826</td>\n",
       "      <td>0.981818</td>\n",
       "      <td>218</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Precision    Recall         F  Support\n",
       "Ankle boot     0.949721  0.939227  0.944444      181\n",
       "Bag            0.938679  0.947619  0.943128      210\n",
       "Coat           0.783251  0.783251  0.783251      203\n",
       "Dress          0.899441  0.870270  0.884615      185\n",
       "Pullover       0.772222  0.772222  0.772222      180\n",
       "Sandal         0.939891  0.934783  0.937330      184\n",
       "Shirt          0.652406  0.606965  0.628866      201\n",
       "Sneaker        0.912442  0.942857  0.927400      210\n",
       "T-shirt/top    0.773109  0.807018  0.789700      228\n",
       "Trouser        0.972973  0.990826  0.981818      218"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import precision_recall_fscore_support\n",
    "\n",
    "micro_fscore = precision_recall_fscore_support(y_test_encoded, y_test_pred, average='micro')[2]\n",
    "print(f'Micro FScore = {micro_fscore}')\n",
    "\n",
    "p, r, f, s = precision_recall_fscore_support(y_test_encoded, y_test_pred)\n",
    "\n",
    "pd.DataFrame(\n",
    "    {\n",
    "        'Precision': p,\n",
    "        'Recall': r,\n",
    "        'F': f,\n",
    "        'Support': s,\n",
    "    },\n",
    "    index =le.classes_.tolist()\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc503c99a58>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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VImuXbty/fXXB/XdHDx4kL179/Lrr7+yYMECvvrqK1avXk3z5s3517/+RY0aNUqs/O+88w5PPfUUMTExPPXUU7Rp06bEli1SHoS2ZAAWLlxI9+7d88hdNHoyZhhE232RVq1axbXXXsvatWuLlP/UU08lLS2NlJSUAkenNG/enFmzZuXbL1RU+/fv55577mHSpEk5aTVr1uTbb7/l2GOPPaJlQ/Rtz4KUl7qqnrnt37+fevXqERoTWrVqxWeffVakZRz2kzGlfGvatCmff/45ffv2LVL+tWvX8vPPPxc6/HHlypX06tWLlJSUwy7bhm6z3LcAABPuSURBVA0buOiii4ICDMDOnTt5/fXXD3u5IuXN6tWrcwUY8B6cmJ6eftjLVZCRIqlatSoTJkxg4sSJnHDCCSW23GXLltGrV6+cPp7Vq1dz11130alTJ0aPHh000iVUeno6/fr148cff8xz/nPPPceBAwfynCciwfK7me7BgwdZsWLFYS9XfTJSLN26daNNmzaMHz+e9evX065dO8466yySkpJ49dVXWbJkSVD+mJgYqlatSkJCAo0aNaJdu3bMnj2bb775JifPkiVLuOCCC2jWrFnQjr5o0SJeeeUVhg0bRnp6OsuXL2f//v385S9/oVu3bvzzn/9k9erV+ZZ127ZtvP322wwaNKjEPweRaJNXf0y2xYsXH3Yfp/pkwqA8n+/dsmULv/32GwkJCSQkJHDcccflui9aamoqvXr1YtGiRYe97quuuopp06YFPWfnsssuo2bNmkGnyRo0aMCSJUuIizv831PlZXtC+amr6pnbFVdcwVdffZXnvG7dujFx4sRCl6E+GQm7evXq0bx5c+rXr0/VqlXzvPFmlSpVeOedd2jbtu1hr+fdd98NCjD16tXj+eefZ8SIERxzzDE56Rs3btQjq0WKoKCWzKJFi/LsrykKBRmJiGrVqjFr1iymTJnCOeecEzSvRYsW3HLLLcW64PPZZ5+latWq1K1blwEDBgTNGzFiRM455dTUVGbPns369euPvBISFmlpacyZM4dff/010kUpN7Zv387OnTtzpitWrEjlypWD5v/000+HtWz1yUjEmBmdO3emU6dOzJ8/n8WLF9OyZUvatm2LmTFkyBD+/e9/k5SUxGmnnUaTJk0YP358rvuuXXfddVx44YU503feeScTJ07k0KFDwB+POhgwYABvvfVWzmi2QYMGMWrUKKpVqxa0vC1btpCUlETr1q1zzZPwSklJoWPHjqxfv55jjz2WDz74QM89KgWhrZjGjRtTpUoV5s6dm5O2aNEiGjRoUOxlK8hIxJkZ5513Huedd15Qer169Xj66aeD0vr06cN1112Xc/ubRo0a8cgjjwTladiwISNHjuSxxx7LSfvtt98YP358UL7XXnuNjz/+mOHDh+ccyMaPH897771HVlYWVatW5YUXXiAxMRHnHEuXLmXDhg106NChREfYyR9effXVnFbm/v37eeCBB/jggw8iXKroFzqyrFmzZtSpUycoyMybN48+ffoUe9kKMlKm1KpVi5kzZzJ9+nR27NhBv379qFq1aq58d999N2lpabmCVKhffvkl30ci7N27lwEDBtC3b1/Wr1+fc3uNypUrc9ttt3HHHXfkuW45PM453n777aC0b775hiVLlnD22WdHqFTlQ2hLpmnTpjRu3DgobdasWYwZMyaoz7MoFGSkzDnmmGMKvTDUzHjwwQfJysoKenhb9rzidGIGPs4avD6DJ598kldeeYVOnTpx1llncejQIWbPns3cuXM5dOgQbdq04eKLL6Zz5840adKk6JUrx5YtW5bnkPRnnnmGN998MwIlKj/yasmcd955JCQk5Jxe3rVrF59//jmdO3cu1rLV8S9RK/vhbY888gjVq1cnMTGRRx99lHXr1nH33Xcf0bBm8J69MXnyZO655x5GjhzJ7NmzSU9P5+DBg3z99df84x//oE2bNvTt25eVK1fmen9ycjJvvPHGEQ3ljiahd23I9v7775OcnFzKpSk/Dh06lOuC5qZNmxIfH0/Pnj2D0kN/cBWFrpMJA43BLxvWrl3Lu+++yw8//MCaNWvYtWsXZ5xxBrfeeivx8fFcf/317Nq1K+g9VapUITU1tdjrMjM6depE48aNSUhI4KOPPgq6cPXqq6/miSeeoFKlSsyZM4cvvviCTZs2sXnzZtLS0mjRogV9+/blzDPP5L///S/vvvsu27Zt48orr2TYsGFFPm23adMmli1bRp06dWjdunWu+ZHapunp6TRp0oTffvstz/nXXnstzz77bImtr6zvu0VVlHrOnTuXbt265UzXqFGDtWvXYmbMmzePrl275syrWLEia9asyXd/y+s6GQWZMNAOHB02bdrEvffey8KFC+nQoQN33nknDRs2ZNy4cYwbN+6wgk1BGjVqxKFDh9i4cWOx3lezZk1uuukmdu/ezY8//kilSpW47LLLuOqqq6hQoQLLly9n2rRpzJ49O+h01LXXXsu///3voHPskdqm//3vf4PuzBB6SrNChQp8++231KlTp0TWF+37brai1PPqq68OGlxx+eWX55yezMrKokWLFmzatCln/tixY7nmmmvyXJaCTCnRDhxd8qpnWloay5YtY+nSpSxfvpzMzExat27NJZdcQnx8PP/73/+YMmXKET+L40jUqlWLatWqsWbNmnzzdOzYkddffz3nl2lycjK1atUiJSWFunXrEhsbWyJl2b17N5UqVcr32qc+ffrw6aef5kwPHjyYzz77LOjajO7du/Paa69hlus4Vmyh23Tq1Kk8//zzHDx4kBNPPJFatWrRvn17+vTpUyLri5TCvqMbN27kz3/+c1BAnzlzJu3bt8+ZfvTRR3nyySdzptu3b8/MmTPzXJ6CTCkpzwffaHS49XTO8fHHH/PII4/kezV19erV2b1795EW8YjUqFGDE044gdjYWLZs2ZLT0VuzZk1uvvlmbrzxxiJdL+ScY/78+axevZrMzEwOHjxIUlISc+fO5aeffso5ZXjDDTdw0UUX5QSwTz/9lP79++dc1wTw5ZdfsmTJEoYPHx60jgkTJhT5buAFCdym7733Htddd12e+W644QbGjBmT550ryoLC9t2RI0fywgsv5Ew3b96cr7/+OiiwrlmzJuiCaTNj5cqV1K1bN9fyFGRKiQ6+0eVI63no0CGWLl1KcnIyW7duZceOHdSrV48ePXpQs2ZN7rvvPt54442c/BUqVKBnz5507NiR+vXrk56eztSpU5k1axb79u2jQYMGDBgwgEOHDvHcc88FPVCuMLGxsRx33HHFerzCscceS9euXTnnnHOoU6cOX375JbNnz2bfvn20bNmSgQMHEh8fz2OPPVbku/XWr1+fXr16cfzxx/Pwww8HBZhmzZoxd+5cMjMzueSSS4KWWbVqVebOncvJJ59c5PIHWrlyJWPHjiUjI4MhQ4ZwzDHH0Llz5wI/w7/85S88+eSTZTLQFLTvpqSk0KxZM/bt25eTNn78+Fx3zACvxbt8+fKc6T59+jBhwoRcrTwFmVKig290KY16zp49m/fff5/ExET69euX5xND09PTcwJU9pf7559/Zty4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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(clf.loss_curve_).plot(\n",
    "    title=f'Loss Curve; stopped after {clf.n_iter_} epochs', color='k'\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 0.1 0.01 0.001 0.0001 "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/tarek/anaconda3/envs/scikitbook/lib/python3.6/site-packages/ipykernel_launcher.py:42: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.\n"
     ]
    },
    {
     "data": {
      "image/png": "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zd13302ZMmXo1atXilf0fWXcuHGUL1+eatWqsW3bNr/GIiIiIhIMfHLF2xiTA5gKtASOAJuMMYuttUlvIB0DzLXWvmOMqQ4sA8r7Ij6RYHDq1Ck+++wzypQpQ6tWrTDGAI6u0StWrPC4zfnz5zl+/DhHjx5Ncb8HDx7k7bff5s477+TWW29l6dKlvP/++2nGc+DAAedzay3ffPMNMTExtG3bluLFi7sknsn973//4+DBg5QvXx6AH374wWX96dOnsdY6X+OBAwdYuHChx30dP37c+XzLli1MmTKF5557jhEjRji7u8fHxzNv3jy6dOlCjRo1GDdunEvyO23aNAoVKsS3337rtv9ly5bRoUMHAH799VdWrlzJSy+95OyG/8ILL3DmzBn27NnjHC3+559/pkOHDrRp0wZrLatWrXImuEuWLOGhhx6iZcuWdO7cmcjISFasWMGWLVvIkSMHTZs25cqVK+zcuZPOnTtTvHhxj+/9mjVraNy4MdWqVXNZt379evbv388999zj8ceYrVu3Ons4/PnnnzzxxBN88803zvd63759rFixgieeeMLj+y0iIiIi7nzV1bwesNdaux/AGPMp0BFImnhbIDzheQSQciYgIi7i4uJo0aIF+/btA2DixIlER0cDrgOoebJz5840p/F69tlnCQkJYc6cOfTv39+re5sTYwHHHN2JXbKnTZvG2rVrU7ziDY5E/b333mPs2LEA5M6d263O77//TunSpQFHwuutSZMm0a1bN/7880+3devXr+fcuXMerzhPmDDB4/7effddOnTowLfffkufPn08bpt8UDtwDE73yy+/eNzn8uXLWb58OZ988gkdO3bk+eefd657+eWXnc9feeUVVqxYQZUqVZxlixYt4rHHHiMuLo7w8HBWrlzpTL5feukl5/aVKlVi9erVREZGuhx7+vTpLsu//vor3333HQ0bNuTQoUM0b96c06dPK/EWERERSQfji8GBjDH3A62ttX0TlnsB9a21g5LUKQH8DygI5ANaWGtdhjg+c+aMM9iYmJhMj1vEk8qVKzufR0REGF8f39N5sHHjRgYNGuRSL3GU8sGDB7Nhw4YU9zds2DAOHTrEZ599lqFxhoeHs3r1agD69evHjz/+6Fw3dOhQl2Q0d+7cjBw5kn//+9/OsmrVqjm7mLdr184tUa5Xrx4nT57k5ptvJk+e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uHHj+N///sftt9/OyZMnOXz4ME899RTt27dnyZIlnD17NtV9rF69mrVr19KsWTO+/PJLj3VWrlxJZGQkJUuWdB43+QCryS1atOj6XpSIuFDiLRIEMuqK99SpUylVqpTbdF+epHTlt3PnzrRv357atWt7tR+ASpUqAZ6veFevXp1Zs2a5lefJk4eePXvy4YcfAo5k+e2330713rXBgwfzyCOPAFCuXLl0/0AgktXs2bOHyMjINHuT+MPZs2fZv38/NWvWJCTEV5OsOK7u/fLLL4SEhFCnTh2N4C8BYd68ec4BLX/55RdneZ8+fdi4caPLj8apeffdd2natCmrV69OtV5KXcZFJPMo8RYJAhmReOfIkYNGjRoBeHWPd61atVJcFxoaSp8+fXjxxRe9OnbiXN+erniXKVMmxe1ee+01GjVqxOHDhxk0aBC5cuVK9TidOnVi2bJl7Ny5kzZt2ugLtwS1UaNGMW3aNIwxzJgxg/vvv9/fITnt3r2bVq1acfr0aWrXrs2XX37p7H2SmVatWkXv3r2dg0qGhYWxfPlyateunenHFklNSrNIXL16lalTp3qdeK9cuZJFixa5zVaSkfr3709ERESm7V8kWCnxFgkC6Um88+TJQ4cOHZg7d65LeY0aNQgLCwPSTrxbtWpFrVq1Uh2BfODAgXz77bfO7m7h4eGEhoZy8uRJl3rly5d33oft6apcaol3aGgoXbt2JSYmJs2kO1GDBg1o0KCBV3VFsqrff/+d6dOnA46upGPGjKFLly6ZemXZWsvnn3/O559/Tvfu3Wnbtm2KdUeNGuUcIHHbtm0sX76c9u3bZ1psX331Fa+99hrffvutS/mlS5cYPXo0y5cvz7RjiyR36tQppk6dyuXLl3n88ccpXLgwu3fvTrH+zJkz3cpKly7tsVeZtdatN1fjxo0pXrw4n332WarTkN111128/vrrPPXUU6xdu5Y8efIQGxvrnLmjWrVqzJ492+W+chHxnhJvkSCQnsT7999/54cffnBLvG+77Tbn89R+ya5evTozZsxI8zi5c+fms88+4+TJk1y6dIlixYoxYcIEt5G2q1at6nye3iveIuIqPj6ekJAQNm3a5PIF+48//mD79u384x//wBiT4dMJxcXFsX79eucX/kWLFjFp0iSXUf8T/fTTT6xZs8albPPmzTRo0IBcuXJRoECBNI8F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Th2P71V4eDi33nqrW+Il/rFz5062bdtGs2bNKFasGPv372fjxo28+OKL/PHHHze8/zvuuINmzZoB0LFjRzp27Ag4Rtlv3749mzZtIkeOHIwePZratWvz7rvvOrcdMGAAADExMRQqVOiGYxGR4KDEWyTIJE6N4+mKt7qai2SulBJvgLfffps5c+Z4PVd2ek2aNIlhw4a5lFWrVo18+fLx7bff8sMPP/D555+7zL3dr18/j91wp0yZQo0aNShcuDAffvghr7/+usv69u3bM2nSJG666SbAMd9w4ujq4eHhjBgxgr59+7JhwwZy5sxJgwYN3BKQjh078sILLziT806dOrF06VKuXbvmrJM/f34+/PBDzpw5Q+HChbnzzjvJlSsXlStXdt6zm5IyZcpw9erVtN42N7Vq1XIbRX3q1Km0adOGmJgYJd4BYMGCBfTr14/Y2FgiIyMZPnw448eP5/LlyylukziafuI0mWFhYYwcOdLlVo9EpUuXZtasWR67fufJk4clS5awefNmKleuTLFixTL0tYlI8FLiLRJkjh8/DuiKt4gvHTt2jMcee8ylm7kn15N0d+vWjatXr/L555+nWKdu3bo0btyYnDlzuiSut912GwC5c+emcePG1KhRg7/++otffvmFRx99lNq1a3PmzBm3/XXt2tX5/0W1atXc1kdHRzuTboBXXnmFoUOHcvr0aaKjowkLCyMsLIzOnTunGHP58uWZOHEi77zzDlFRUbz88su0aNGCiRMncvLkScqUKcMzzzxD8+bN3bYtWLBgivtNVLJkyesanf322293K+vZsyfGGOrXr8/YsWN5//33ufXWW9O9b0m/TZs2Oa9i58+fn5o1azJnzhzngISnT5/m+eefT3H7AgUKUKFCBSZPnuy8z79evXoAVK1alUGDBnHmzBmqV6/Otm3bKF68OJMnT6Zo0aIp7jNPnjw0atQoA1+liGQHSrxFgszFixcBPN5TlnzObBFJn0uXLnH06FEqVqzoMljSsGHD+P777zP0WC1btmTu3LkYY3jttddSTbwTu7Y+9dRTzu7r1apVo2HDhi71ChUqxEcffeRS1qBBAypVquScp3vcuHEuP9JVrVrV7XjJk/Fq1ao55/yOiYnx9iXSt29f+vbt61x+6KGHeOihh9LczpvEO2fOnF7HkdRtt93G7bffzqZNmwD45z//6fK3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fohIRCTrUeItIiJBJT4+Xom3yHW6evUqzzzzDP/4xz/o168fp0+fZubMmW71Jk+eTJ8+ffwQoYhI1qSu5iIiEhTi4uL45ptvuHz5MhcuXHCWR0REULx4cT9GJpI1WGsZOnQoH3/8MQBz585l7ty5LnXy5MnDjh07KFSokD9CFBHxqf3793Pw4EEaNmxI7ty53db//vvvbNiwgWvXrtGjR49U96XEW0REsjxrLd27d+fLL790W1etWjWMMX6ISiRr+fDDD51Jd0ruv/9+Jd0iki18+umnDB48mGvXrlG9enUWL15MkSJFnOu///57unbtyvnz5wGUeIuISPDbsWOHx6QboGrVqj6ORiRreuutt1JdX7RoUZ599lkfRSMikrEOHTrE+PHjXaZETMlvv/3G0aNHncs7duwgKiqK+vXrExISwunTp90Gck2LEm+RIDBp0iR/hyDiV9u3b09xXceOHX0YiUjWdPDgQfbu3Zvi+jx58jB79mxKlizpw6hERNLn5MmTnDhxwq1869atDBs2zOVWtOuxcePG695WibdIFjZ48GCqVq1Kz549/R2KiF8lH0wtUZ8+fWjatKlvgxHJgpL3GImKiqJNmzb8+eefhIeH06tXL2rVquWn6EREUmet5fnnn0+z505myZUrV5p1lHiLZGH//ve//R2CSEDw1N3r/vvv5+WXX9b93SJp2LBhAyNGjHAp69WrF08++aSfIhIRSd26detYs2YNsbGxgGMwyL/++ssvsTz66KNe9T5V4i0iIlle8sT7gw8+oFOnTn6KRiTr2LhxI61bt3Yrb968uR+iERFJ2wcffMBTTz113duXKFGCadOmERqadipcvnx5ihYtyq+//uqxm3rRokWpXLmyV8f1WeJtjGkNvA7kAGZaa//PQ51uwAuABX6y1qr/rIiIpOrChQv89ttvzuWQkBBatWrlx4hEso7Fixe7lRUvXpwaNWr4IRoRkdStWbOG4cOHp1mvWLFiFChQwLl89epVwsLCuOOOOxg3bpzLOm/Url073bEm55PE2xiTA5gKtASOAJuMMYuttTuS1KkMjAYaWmtPGWOK+iI2ERHJ2nbv3u2yXKFCBcLCwvwUjUjW4mlAtREjRugWDREJOLt376Z3797ExcWlWCdPnjzMmTOHu+66y6U8JibG6yvTmcVXV7zrAXuttfsBjDGfAh2BHUnq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rp8iyd68veI9C1hkjHmdZF3NrbVfZXhUIiIiInLddu3a5bJcu3ZtQkO9/donIsHi4sWLbqOZ16lTx0/RZG/e/g/8/9q78/ioyvP//+8rATQEElatFgTFUBatglDAKipgAW0RqLSIULUIKqJ1QUXRStGfCxWVVioopbVuqPirIBVtQRTqB5VFFAlLZFMkokES0AQx4f7+kcl0JjOTTJaZM5O8no/HeXDOfbbrTHIB19z3OWei78/7yrU7SSfVXjgAAACoqU2bNgUt88ogoH568803VVJS4l8+6aST1KJFCw8jqr+iKrydcyfGOhAAAADUDgpvALNmzdKUKVOC2hhm7p2oxxyZWQNJZ0r6oaTdklY554pjFRgAAACqp3zh3aVLF48iARAPq1at0rJly3TOOefo7LPP1pdffqm77747ZDsKb+9E+x7vTip9lViapM8ktZV0yMx+4ZzbVOHOAAAAiJuioiLt2LEjqK1jx44eRQMg1hYsWKBx48bJOaeHHnpIjz32mD744AMVFwf3kR511FEaNGiQR1Ei2h7vv0h6QtJDzvcSODOb5Gs/L0axAQAAoIq2bNkS9M7edu3aKT093cOIANSm/Px8XX311Vq2bJm+//77kPUTJ04Ms5f0t7/9Te3bt49xdIgk2sL7dEnnu8C/xaVHJU2JsD0AAAA8sGXLlqDlzp07exQJgNpUUFCg119/XVdddVWV9svIyFB2draaNGkSo8gQjWgL7z2SzpEU+Oqws33tAAAASBC5ublByyedxAtogGS3d+9eDR48WNu3b6/yvpdeeilFdwKItvC+Q9IiM1ssaZekdpIulDQ6VoEBAACg6vbt2xe03KpVK48iAVAbioqKNGrUqAqL7ubNm6tNmzb6/PPP9fXXX0uSGjRooAEDBujOO++MV6ioQLSvE1tkZt0l/UrS8ZI+lvR759zWWAYHAACAqilfeLds2dKjSADU1JEjR3TNNddo7dq1Ievat2+vpUuX+nPczPzPd8jJyVFWVpbMLK7xIrKoXyfmK7LvjWEsAAAAqKHyhXeLFi08igRATd1333165ZVXQtpvvPFGTZgwIWRES1mhbWYU3QkmYuFtZk8458b75p+W5MJt55z7TYxiAwAAQBXt378/aJnCG0guzjm98MIL+uMf/6ht27YFrevcubNef/11ZWZmehQdqquiHu/AF0B+EutA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xtR+LilwLHcbX1tMVHeocKxfp+Wc03vvvVetfc8//3z/vVt9+vRRampqbYYWM40aNdKiRYu0cOHCsOsnTJigjRs3qnXr1lU+9imnnKK0tDRJ0h//+Ed99dVXeumll4KKbkk67bTTgl73FnhPfSRnnnmm1q9fr927d2vt2rX6/PPP9cEHH6hXrxoN1AAAIGYYag4AiStePd6rJWWZ2YkqLbhHSqq8+qmmHj16BC2He91UOEOGDNHDDz9c7fN2795dDz74oObMmaP8/HxJ0pYtWyI+Ib0qxo4d658/8cQT9eKLL+qhhx7SqlWrotr/+OOPV5cuXULa27Vrp759+2rJkiWaP39+jeMMNGzYMN12223q1KmTJOm6667Tn//8Z//6tLQ03XrrrWrWrJnuueceXX311UH7Dxo0yH/v+NKlS0OOf8YZZwQtN2zYMOyXLmamV155RY8++qiaN2+um266Kar4GzZs6J9PSUnh3m8AQELj4WoAkLjiUkk454olTZT0hqRNkl50zm00s2lmNkSSzKynme2WNELSHDMLfXx4lDp27Khhw4ZJKh2OPGPGjKj2u+KKKyIW6a1atdKSJUvUoUMHSaUP5/rXv/6lbt26SZIaN26s6dOnq2fPnpo7d64WLFigBQsWaMOGDXrkkUfCHvOmm27SxIkTg86/f/9+9ezZM2i7Jk2a6Kyzzgpq69+/v5YsWaLHHnvM/97pbt266a233gp6D3VKSooefvhhZWdn+2MKnGbMmKGLLrpIs2fP1ooVK4KKzTKdO3f2H6vs+ivSrl07bdiwQX/729/8RbckTZ06VZdccol/+b777vM/CG/48OE688wzJUmpqalauHCh5s+f749z3LhxIefp3r17pbGUad++vR599FHdfffdlT5oDwCAZESPNwAkrrjd4+2ce03Sa+Xafh8wv1qlQ9Brxbx58zRx4kS1bNkyaJhxRdq2basPP/xQ2dnZ6tq1q77++mt9+OGHOvroo9W7d281bdpU//3vf7V+/XqlpKSoV69eWrp0qdatW6f27dtHHC59xRVXKCcnR3/5y1/8bT/72c80ZcoUpaamatSoUSopKdGpp54qSRozZkzQPdb3339/xIel9OrVS2vXrtWuXbvUqVMnpaWlafXq1VqzZo2+//57de7cOWTodSQ//vGPNWvWLI0fP97fNnjwYP8D0zIyMnTc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\n",
      "text/plain": [
       "<Figure size 1080x360 with 5 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import warnings\n",
    "from sklearn.exceptions import ConvergenceWarning\n",
    "\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "\n",
    "learning_rate_init_options = [1, 0.1, 0.01, 0.001, 0.0001]\n",
    "\n",
    "fig, axs = plt.subplots(1, len(learning_rate_init_options), figsize=(15, 5), sharex=True, sharey=True)\n",
    "\n",
    "for i, learning_rate_init in enumerate(learning_rate_init_options):\n",
    "    \n",
    "    print(f'{learning_rate_init} ', end='')\n",
    "    \n",
    "    clf = MLPClassifier(\n",
    "        hidden_layer_sizes=(500, ), \n",
    "        learning_rate='constant',\n",
    "        learning_rate_init=learning_rate_init,\n",
    "        validation_fraction=0.2,\n",
    "        early_stopping=True, # Set to True to get clf.validation_scores_\n",
    "        n_iter_no_change=120,\n",
    "        momentum=0,\n",
    "        max_iter=120, \n",
    "        solver='sgd',\n",
    "        batch_size=25,\n",
    "        verbose=0,\n",
    "    )\n",
    "    \n",
    "    with warnings.catch_warnings():\n",
    "        warnings.filterwarnings(\"ignore\", category=ConvergenceWarning, module=\"sklearn\")\n",
    "        clf.fit(x_train[:1000,:], y_train_encoded[:1000])\n",
    "        \n",
    "    pd.Series(clf.validation_scores_).plot(\n",
    "        title=f'learning_rate={learning_rate_init}', \n",
    "        kind='line', \n",
    "        color='k',\n",
    "        ax=axs[i]\n",
    "    )\n",
    "    \n",
    "    axs[i].set_xlabel('# Epochs')\n",
    "    axs[i].set_ylabel('Validation Score')\n",
    "    \n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 1500 "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/tarek/anaconda3/envs/scikitbook/lib/python3.6/site-packages/ipykernel_launcher.py:43: UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAFNCAYAAAD2ALfvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdd3xUVfrH8e+TUEKRXqQZgqLAiqBIsbD+RFTUVXFtoIAoLC5IU7AtioquHVEQQVREQde6KCqKrq6CIoKgrKuUUAIERGkhIjXJ+f0xQ3YmdZLMnckMn/frNS/nnHvuuU8OiXeeOfeea845AQAAAAAAbyREOwAAAAAAAOIZiTcAAAAAAB4i8QYAAAAAwEMk3gAAAAAAeIjEGwAAAAAAD5F4AwAAAADgIRJvoBhm9rmZPR+F495rZms87L+/mWV51T8AALGE8z0AL5F4AxFgZllm1j/aceTxuqQm0QzAzAaZ2admtsPMnJmdWUi7/ma2yswOmNlKM7u2gDadzWyhme03s5/N7CEzS/T+pwAAwIfzfcFCOd+b2Qz/tryvCnnaXWhm3/s/E6SZ2S0F9HW8mc0zs71mtt3MpppZNS9/RqA4JN7AEco5t88590uUw6gq6TNJtxXWwMx6SnpB0lRJ7SQ9L+llM7sgoE0zSZ9IWiWpg6TBkm6U9HfPIgcAIAbEyvneb4GkRoEv51zubL2ZnSrpXUkfSmov6V5JD5rZXwPaVJf0qaQsSadLukpSD/k+SwBRQ+INhCbBzB72f2uaaWbTzCxJkszsXP/laTvNbLeZfWFmnQ7vaGZpkhIlvXj429uAbR3M7CN/n3vMbLGZdQ48sJld6p/l/d1/nJahBm1mfzOzdf5vhbf5v/2t4t8WdOmZ/1vjgr5p/j//9or+y+HW+2eVfzSzG0s3nD7OuSedc3+X7wRZmNskve6cm+CcW+mce1zSPyXdHtBmsKRMSQOccz86596RdLekYXzDDQAoAc730TvfS9JB59zWwFee7bdIWuKcu9M5t8I5N0PSJEl3BLS5RlI9Sdc45753zn0m6SZJV5tZSll+DqAsSLyB0Fwhqa6krpKuldRT0kP+bdUlPSPpNPm+WU2V9JGZ1fVv7ygpW9JI/e8bXJnZHyTNl7RLUjdJJ0uaoOC/y0byJZXX+vs+StL0UAI2sz/LdyIaIamlpHPl+4a4MB0V/C3zS5K2Slrp3/6cpD/LN5PcWtI4SY+Y2YCAY37o/0BR1KtrKPH7+6vkj+ujPJs+ktTF/ncp+RmSPnbO5eRpU1W+cQUAIBSc76Nwvg/Qycy2+pP+t/1jF+gMFfyZINnMmga0+do5tzugzceScvzbgKioUHwTAJJ2Svqrcy5b0gozu0vSRDO7yzk3O7ChmQ2SdLl8lzW94pzbZmaStDvPN7d3SFoj6dqAhDE1z3ErS+rrnNvm7/tRSf8wsyTn3P5iYk6W70T6kXPukKSNkr4vrPHhY/iPM1DSlZLOcs5t9X9D3E9SG+fc4RPzejM7QdIw/e/yrYGSqhQT1+ZitgeqJ9//p/J+471VvrGpI2mbfB8cviqgjfzbAAAIBef76JzvJWmefJeRr5HUUNJoSUvMrJNz7r/+No1U8GeCw9vSC2rjnDtkZjvFZwJEEYk3EJrF/pPwYV/Jd5I81sx+k+/b4NMkNZDvG+yq8p0Ii9JBvpNkThFttgSeICVtkWT+42wspv83JA2XtMHMPpbv8q53nHO/FbWTmXWT9LSk3s65b/3Vp/qP+63/Q8VhFeT7dl+S5Jwr6UkWAIDyhPN9lM73zrl/BBR/MLP5kn6U72cbFO7jAZFG4g2U3fuStst3/9AmSQclfSmpUhj6PpinfPh+sWJvE3HObTazVpLOlu/Strvlu1Sss3NuU0H7+L/RfkvS3Xm+2T98vNMl7S0kJpnZh/JdnleUC5xzC4qL32+7fIujHJ2nvqGkA/LNTEjSz4W0ObwNAICy4nz/v/3Dfb7Pxzl30My+ldQ8oDqU8/3PkpoFNjCzivJdJcdnAkQNiTcQmo5mlhjwLfjp8iV+OyS1kXShc26eJPnvMWqQZ/+D8i24EmippHPMLKGYb8FLzTl3QL57nz4ys7sl/SLf/WqT8rb136P2vqS3nXOPFRCrJB3jnHu/iEOG9dIz/0l3iaTzJb0csKmHpEUB/x5fSeqbZyx7yPeh4btQjwcAOOJxvveJ6Pm+IP51XNpJ+jqg+iv5PhOMC6jrIWmDcy49oM1TZlbDOZfprztXvi8V8t6WBkQMiTcQmrqSJpvZU5JaSLpf0rPyfXO6TdJfzGytv92jkvbl2X+9pLP93xAfdM5t97f7RtIrZjZevkVXTpGU7pz7WmXkXwQlQdJiSRmSzpFvsZafCtnlbX+7+8ws8Nvknc65NWY2XdJzZnabfCfBavJdPlffOfeIVPJLz/zHOVpSY3/VcWa2R1LgSqaPSnrLzBbL96HiIvkWfbk4oKspkob643tC0rHy/RtNcs79XpKYAABHNM73UTjfm+8RYOP8sW2W7wuNW+X7N+gT0NUESQvN7O+SZkrqLN+95zcHtHlVvln/V81sjHwz3ZPle0LK+pLEDYSVc44XL15FvCR9Lt/Koo/J9433b/I9S7qKf/tZkpZL2i/fc6Qvl29hkHsD+ughaYV834S7gPpOkv4l6Xd/v4skdfJvu1fSmjyxnCnfpV7NQ4j7z5IWyneC3yvpv/I9buvw9v6SsgLKrpDX//m3J8r3aK+V/p9ju6QvJF1ZhrG9t5Bj3punXX9Jq/3HXSWpTwF9dfH/vPvlW1TlIUmJ0f794cWLFy9esfHifB+98718s+cf+c/fB+VLvudIOqWAvi7y/zsckLRB0i0FtDlBvpXM9/r/LZ+VVC3av2O8juyXOZd7uwYAAAAAAAgznuMNAAAAAICHSLyBGGVmH5rZnkJeH0Y7PgAAUHac74H4wKXmQIwysyYqfEXRfY5nagMAEPM43wPxgcQbAAAAAAAPxdTjxHbv3s23BACAmFGzZk2LdgzxgPM/ACCWFHT+5x5vAAAAAAA8ROINAAAAAICHSLyh1NTUaIcQlxhXbzCu3mBcgSMTf/veYFzDjzH1BuMaOSTeAAAAAAB4iMQbAAAAAAAPkXgDAAAAAOAhEm8AAAAAADxE4g0AAAAAgIdIvAEAAAAA8FCFaAcAAIh9O3bsUEZGRr76Jk2aKCkpKQoRRUZGRoZq1aoV7TAAAEA5R+INACg155xGjhypl156qcDtSUlJevbZZ3XppZdGODJv7du3T3/+85/19ddf69RTT9U777yj6tWrRzssAABQTnGpOQCg1GbMmFFo0i1J+/fv1+DBg7V+/foIRuW9Z599Vl9//bUk6dtvv9WkSZOiHBEAACjPmPEGgBiWlZWll156Sf/973/lnCt1P7t371bNmjVLtI9zTm+//Xax7fbu3atrr71WnTp1CqnfChUqqGvXrrrwwgs1ffp07d+/XzfccIOWLVumuXPn6sCBA7ltjz32WA0cOFAff/yxFixYoKysLDVq1EgDBgzQjz/+mNu+Tp066tu3r1JSUnL33b9/v5577jmtXbu20FhatGihgQMH6pNPPsnt/+ijj9bDDz8c1O6RRx7RHXfcITML6WcEAABHFivLB7VI2717d+wEG0NSU1PVsmXLaIcRdxhXbzCuwYYPH66XX3452mFIkipVqqSmTZtK8n0hsHHjxihHFKxevXpasGCBGjVqJOecevXqpXnz5oWt/2nTpmn//v3q169fbl3NmjXJxMOA8793+H+qNxjX8GNMvcG4eqOg8z+XmgNAjPrwww/LTdIt+WZ9ly1bpmXLlmn58uXq3r17tEMKsn37do0cOVKZmZmaPn16WJNuSRo0aJCGDx8e1j4BAEB84FJzAIhBO3fu1MiRI6MdRq6LL75Y/fv3zy2bmZ566imdd9552rx5c/QCy2PevHk65phjoh0GAAA4wpB4A0AMuv322/XLL7/klhMTE3XvvfeWemXtX3/9VQ0aNCjVvo0bN9Y555yT7/7mJk2a6IsvvtBnn32m33//PaS+1q9fr4kTJxbZ5pprrtHJJ5+s++67T3v27ClVzIGqVaume+65RxUrVsyty87O1rhx45SZmVnm/gEAAEi8AZRb3377rf7973/r0KFDuXU7d+5UnTp1ohhV9O3atUtvvvlmUN2oUaM0bNiwUvfp1T1e9erV01VXXRVye+ec1qxZo7lz5xa4vW3btnrqqadUsWJFVapUSSNGjMjddtFFF2nQoEFBjy5r27atpk2bpm7dumnfvn0F9nn//ffrhhtuyFdfuXLloDE9//zzNWzYMP3pT38K+ecBAACQSLwBlFMffvih+vTpo+zs7GiHUu6deOKJGj16dLTDCAsz05QpUzRq1CgtX75cffr0UaNGjTR+/Hg1bdpUEydOzJ2Z7tevn3bv3q2ZM2eqXbt2Gj9+vGrWrKnnn39ejz32mJo0aaJJkyapSZMmevnllzVmzBht2bIl91jVqlVT3759df311xcYS58+fZSRkaGXX35Zbdu21RNPPKFatWppypQpGj9+vBo1aqR7771XDz/8sL755hvl5OQErZoOAABwGKuag9UMPcK4lt727dvVpUsXbd++PdqhlHsVK1bUZ599prZt25apH35fvcGq5uHB+d87/O17g3ENP8bUG4yrNwo6/zPjDUTZDz/8oKFDhyo1NTXaoZQbWVlZOnjwYLTDiAljx44tc9INAAAAb5F4A1GUkZGhXr16latVn8ujyy67TCeccIIk7vE+zMzU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w4YNgxZJ+/777zV48GBlZ2cXeIyLL744tz8A8SNuEu+893iTeAMAACBcfv31V40aNSqo7j//+Y9uuukmtW3bVpKUmpqqr776KqjNmDFjlJGRkfss7lmzZhWadEvS1VdfHebIAZQHcZt4c6k5AAAAwsE5p1tuuUU7d+7Mt+2NN97QG2+8Uei+e/bs0T333FPsMWrVqqXBgwfrjDPOKFOsAMqnuEm8f/nll6Ayq5oDAAAgHN566y29//77Ye+3d+/emjJlStj7BVD+xEXinZWVlW9xi2bNmkUpGgAAAMSyjz/+WOPGjdOvv/4qSUGLn4VLcnKyHnroobD3C6B8iovEOz09PehemQYNGqhatWpRjAgAAACxaOXKlerbt68OHDhQ4PbKlStr/vz52rlzpz755BMdPHgwaHvFihV13HHH6fLLL9crr7yi9evX5+ujXr166t27t2rVquXJzwCg/ImLxDstLS2onJKSEp1AAAAAELOysrI0ZMiQQpNuSbrrrrt0wgknSJJOO+20AtukpqYqKSlJAwYM8CROALEnLhLvvN8kJicnRykSAAAAxKopU6Zo2bJlBW5LSEhQ7969NWTIkAhHBSAexEXizYw3AAAAyiInJyffQmd/+tOfNH78eElS1apVddRRR0UjNABxIC4S77wz3s2bN49OIAAAAIhJ33zzjbZs2ZJbrlq1qiZMmKD69etHMSoA8SIh2gGEAzPeAAAAKIvZs2cHlS+44AKSbgBhE/Mz3s65fIk3M94AAADxyzmnn376Sdu2bSuyXVJSktq1a6cqVaoUuH39+vXasGGDJGnOnDlB23r27BmeYAFAcZB479q1S5mZmbnlKlWqqGHDhlGMCAAAAF5xzmnIkCH6xz/+EVL7Y489Vh988IGOPvrooPrx48fr/vvvL3Cf6tWrq3v37mWOFQAOi/lLzQu6v9vMohQNAAAAvDRz5syQk25JWrt2rUaMGCHnXG7dV199pQceeKDQfS644IJCZ8kBoDRifsaby8wBAADim3NOL774ol566SUtX768xPvPmzdPF154oapWrSpJ+uGHH4IS8UBmpv79+5clXADIJ+YTb1Y0BwAAiG/PPPOMxowZk6++SpUq6tSpU4H7rFu3Tps2bcotf/3114X237VrVyUkJKhatWq68sordcYZZ5Q9aAAIELHE28x6SHpKUqKk551zD+fZ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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import warnings\n",
    "from sklearn.exceptions import ConvergenceWarning\n",
    "\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "\n",
    "# batch_sizes = [1, 10, 100, 1500]\n",
    "batch_sizes = [100, 1500]\n",
    "\n",
    "fig, axs = plt.subplots(1, len(batch_sizes), figsize=(15, 5), sharex=True, sharey=True)\n",
    "\n",
    "for i, batch_size in enumerate(batch_sizes):\n",
    "    \n",
    "    print(f'{batch_size} ', end='')\n",
    "    \n",
    "    clf = MLPClassifier(\n",
    "        hidden_layer_sizes=(500, ), \n",
    "        learning_rate='constant',\n",
    "        learning_rate_init=0.001, \n",
    "        momentum=0,\n",
    "        max_iter=250, \n",
    "        early_stopping=True,\n",
    "        n_iter_no_change=250,\n",
    "        solver='sgd',\n",
    "        batch_size=batch_size,\n",
    "        verbose=0,\n",
    "    )\n",
    "    \n",
    "    with warnings.catch_warnings():\n",
    "        warnings.filterwarnings(\"ignore\", category=ConvergenceWarning, module=\"sklearn\")\n",
    "        clf.fit(x_train[:1500,:], y_train_encoded[:1500])\n",
    "        \n",
    "    # pd.Series(clf.loss_curve_).plot( \n",
    "    pd.Series(clf.validation_scores_).plot( \n",
    "        title=f'batch_size={batch_size}',\n",
    "        color='k',\n",
    "        kind='line', \n",
    "        ax=axs[i]\n",
    "    )\n",
    "    \n",
    "    axs[i].set_xlabel('# Epochs')\n",
    "    axs[i].set_ylabel('Validation Score')\n",
    "    \n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[learning_curve] Training set sizes: [ 266  533 1333 2666 3999 5333]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done   9 out of  18 | elapsed:   49.6s remaining:   49.6s\n",
      "[Parallel(n_jobs=-1)]: Done  18 out of  18 | elapsed:  1.8min finished\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import learning_curve\n",
    "\n",
    "train_sizes = [1, 0.75, 0.5, 0.25, 0.1, 0.05]\n",
    "\n",
    "train_sizes, train_scores, test_scores = learning_curve(\n",
    "    MLPClassifier(\n",
    "        hidden_layer_sizes=(100, 100), \n",
    "        solver='adam',\n",
    "        early_stopping=False\n",
    "    ), \n",
    "    x_train, y_train_encoded,\n",
    "    train_sizes=train_sizes,\n",
    "    scoring=\"precision_macro\",\n",
    "    cv=3,\n",
    "    verbose=2,\n",
    "    n_jobs=-1\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc4fd1042b0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_learning_curve = pd.DataFrame(\n",
    "    {\n",
    "        'train_sizes': train_sizes,\n",
    "        'train_scores': train_scores.mean(axis=1),\n",
    "        'test_scores': test_scores.mean(axis=1)\n",
    "    }\n",
    ").set_index('train_sizes')\n",
    "\n",
    "df_learning_curve['train_scores'].plot(\n",
    "    title='Learning Curves', ls=':',\n",
    ")\n",
    "\n",
    "df_learning_curve['test_scores'].plot(\n",
    "    title='Learning Curves', ls='-',\n",
    ")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  11 out of  21 | elapsed:   39.5s remaining:   36.0s\n",
      "[Parallel(n_jobs=-1)]: Done  21 out of  21 | elapsed:  1.5min finished\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import validation_curve\n",
    "\n",
    "max_iter_range = [5, 10, 25, 50, 75, 100, 150]\n",
    "\n",
    "train_scores, test_scores = validation_curve(\n",
    "    MLPClassifier(\n",
    "        hidden_layer_sizes=(100, 100), \n",
    "        solver='adam',\n",
    "        early_stopping=False\n",
    "    ), \n",
    "    x_train, y_train_encoded,\n",
    "    param_name=\"max_iter\", param_range=max_iter_range,\n",
    "    scoring=\"precision_macro\",\n",
    "    cv=3,\n",
    "    verbose=2,\n",
    "    n_jobs=-1\n",
    ")"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "param_grid = {\n",
    "    'hidden_layer_sizes': [(50,), (50, 50), (100, 50), (100, 100), (500, 100), (500, 100, 100)],\n",
    "    'activation': ['logistic', 'tanh', 'relu'],\n",
    "    'learning_rate_init': [0.01, 0.001],\n",
    "    'solver': ['sgd', 'adam'],\n",
    "}\n",
    "\n",
    "gs = GridSearchCV(\n",
    "    estimator=MLPClassifier(\n",
    "        max_iter=50,\n",
    "        batch_size=50,\n",
    "        early_stopping=True,\n",
    "    ), \n",
    "    param_grid=param_grid,\n",
    "    cv=4,\n",
    "    verbose=2,\n",
    "    n_jobs=-1\n",
    ")\n",
    " \n",
    "gs.fit(x_train[:2500,:], y_train_encoded[:2500])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def relu(X):\n",
    "    return np.clip(X, 0, np.finfo(X.dtype).max)\n",
    "\n",
    "def inplace_relu_derivative(Z, delta):\n",
    "    delta[Z == 0] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "leaky_relu_slope = 0.01\n",
    "\n",
    "def leaky_relu(X):\n",
    "    X_min = leaky_relu_slope * np.array(X)\n",
    "    return np.clip(X, X_min, np.finfo(X.dtype).max)\n",
    "\n",
    "def inplace_leaky_relu_derivative(Z, delta):\n",
    "    delta[Z < 0] = leaky_relu_slope * delta[Z < 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network._base import ACTIVATIONS, DERIVATIVES\n",
    "\n",
    "ACTIVATIONS['leaky_relu'] = leaky_relu\n",
    "DERIVATIVES['leaky_relu'] = inplace_leaky_relu_derivative"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = MLPClassifier(activation='leaky_relu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
